// 输入一个文件夹，删除内部的空文件夹
// 使用命令 node ./server/reef E:\芒果TV下载目录

import fs from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';

// 获取当前模块的目录路径
const __dirname = path.dirname(fileURLToPath(import.meta.url));

/**
 * 递归删除空文件夹
 * @param {string} folderPath 要检查的文件夹路径
 * @returns {Promise<boolean>} 返回该文件夹是否被删除
 */
async function removeEmptyFolders(folderPath) {
    try {
        // 读取文件夹内容
        const files = await fs.readdir(folderPath);

        // 递归处理子文件夹
        let hasValidContent = false;
        for (const file of files) {
            const fullPath = path.join(folderPath, file);
            const stat = await fs.stat(fullPath);

            if (stat.isDirectory()) {
                // 如果是文件夹，递归处理
                const wasDeleted = await removeEmptyFolders(fullPath);
                if (!wasDeleted) {
                    hasValidContent = true; // 子文件夹未被删除，说明有内容
                }
            } else {
                // 如果是文件，标记为有内容
                hasValidContent = true;
            }
        }

        // 如果没有有效内容，删除文件夹
        if (!hasValidContent) {
            await fs.rmdir(folderPath);
            console.log(`已删除空文件夹: ${folderPath}`);
            return true; // 文件夹被删除
        }

        return false; // 文件夹未被删除
    } catch (error) {
        console.error(`处理文件夹 ${folderPath} 时出错:`, error);
        return false;
    }
}

/**
 * 主函数
 * @param {string} rootPath 根文件夹路径
 */
async function main(rootPath) {
    try {
        // 验证路径是否存在且是文件夹
        const stat = await fs.stat(rootPath);
        if (!stat.isDirectory()) {
            console.error('提供的路径不是一个文件夹');
            return;
        }

        console.log(`开始检查空文件夹: ${rootPath}`);
        await removeEmptyFolders(rootPath);
        console.log('空文件夹检查完成');
    } catch (error) {
        console.error('发生错误:', error);
    }
}

// 从命令行参数获取根文件夹路径
const args = process.argv.slice(2);
if (args.length === 0) {
    console.log('请提供要检查的文件夹路径');
    console.log('示例: node removeEmptyFolders.js /path/to/folder');
} else {
    const rootPath = path.resolve(__dirname, args[0]);
    main(rootPath);
}
